// promisify: 把nodejs里的异步操作变成promise调用形式；
// promisify(类似事件)(事件对象)
// 将原本需要通过传入回调参数来实现回调执行,改为利用promise的.then的方式来调用,从而实现逻辑上的同步操作。
let {promisify} = require('util');
const fs = require('fs');
// 一、普通的写法；
// fs.readFile('./data.txt',(err,data)=>{
//     if(err){
//         return console.log(err);
//     }
//     console.log(data.toString());
// })

// 二、promisify 把执行变成 promise

// 会得到一个promise对象
// let p = promisify(fs.readFile)('./data.txt')

// p.then(data=>{
//     // 异步执行成功了
//     console.log(data.toString());
// },err=>{
//     // 执行错误了
//     console.log(err)
// })

// 三、实现一个promisify

function myPromisify(func){ // fs.writeFile==func
    return function(...args){   // ...args==("./2.txt","我是2.txt")
        return new Promise((resolve,reject)=>{
            func(...args,function(err,data){
                if(err){
                    reject(err);
                    return console.log(err);
                }
                // 判断data是否有，如果有就通过pormise里的resolve返还出去，如果没有就不返还
                if(typeof data !=='undefined'){
                    resolve(data);
                }else{
                    resolve();
                }
            })
        })
    }
}

// 文件读取
// let p = myPromisify(fs.readFile)('./data.txt')
// p.then(res=>{
//     console.log(res.toString());
// },err=>{
//     console.log(err);
// })

let p = myPromisify(fs.readFile)('./2.txt','我是2.txt');

p.then(()=>{
    console.log('写入成功')
},err=>{
    console.log(err);
})
